package javase2.day02.demo02;

import java.util.ArrayList;
import java.util.Iterator;

/*
泛型：
    对比：
       1创建集合对象，没有使用泛型
        好处：创建集合是不使用泛型，默认就是Object类型，可以储存任意类型数据
        弊端：不安全，会发生异常
       2创建集合对象，使用泛型
        好处：
            1避免类型转换麻烦，储存的是什么类型，取出的就是什么类型
            2把运行期异常提前到编译期add
              (java.lang.String) in ArrayList cannot be applied to (int)
        弊端：
            泛型是什么类型，只能储存什么类型的数据
 */
public class Demo01Generic {
    public static void main(String[] args) {
        show01();//不是用泛型，不安全。
        show02();//使用泛型
    }

    //不使用泛型
    public static void show01(){
        ArrayList list =new ArrayList();
        list.add("aaa");
        list.add(1);

        //获取迭代器，使用ArrayList集合中的iterator方法
        Iterator it=list.iterator();
        while (it.hasNext()){
            Object obj = it.next();
            System.out.println(obj);
            //想要使用String特有方法，length获取字符串长度，
            //向下转型
            //会报错ClassCastException。Integer类型不能转换为String类型
//            String s=(String)obj;
//            System.out.println(s.length());
        }
    }

    //使用泛型
    public static void show02(){
        ArrayList<String> list=new ArrayList<>();
        list.add("abc");
        list.add("cba");
        list.add("bca");
        Iterator<String> it = list.iterator();
        while (it.hasNext()){
            String s = it.next();
            System.out.println(s);
        }
    }
}
